#include <iostream>
#include <string>
#include <stdlib.h>
#include <functional>
#include <vector>
#include <unistd.h>
#include <signal.h>

using func_t = std::function<void()>;

int gcount = 0;
std::vector<func_t> gfuncs;

void handler(int signo)
{
    for (auto &f : gfuncs)
    {
        f();
    }
}

int main()
{
    gfuncs.push_back([]()
                     { std::cout << "我是一个日志任务" << std::endl; });
    gfuncs.push_back([]()
                     { std::cout << "我是一个下载任务" << std::endl; });
    gfuncs.push_back([]()
                     { std::cout << "我是一个mysql任务" << std::endl; });

    alarm(1);
    signal(SIGALRM, hanlder);
    while (1)
    {
        gcount++;
    }

    return 0;
}

// int number = 0;
// void die(int signumber)
// {
//     printf("get a sig : %d ,count: %d\n", signumber, number); // 单纯++计算纯CPU计算 number多
// }

// int main()
// {
//     // 统计我的服务器1s可以将计数器累加多少

//     alarm(1);             // 会在1s后收到一个SIGALEM信号
//     signal(SIGALRM, die); // 捕捉SIGALRM 自定义执行die

//     while (1)
//     {
//         number++;
//         // printf("count: %d\n", number++);    //number少 慢  是因为printf是IO
//     }
// }

// // void Handler(int signo)
// // {
// //     // 当对应的信号被触发，内核会将对应的信号(SINGINT的)编号signo ，传递给自定义方法
// //     std::cout << "Get a signal, signal number is : " << signo << std::endl;
// // }
// // int main()
// // {
// //     // signal为什么不放在循环里面？   signal只需要设置一次 进程就会记住这个信号
// //     // siganl:如果没有产生2号或者3号进程，Healder不被调用
// //     for (int signo = 1; signo < 32; signo++)
// //     {
// //         signal(signo, Handler); // 默认终止 ctrl C  -----> 执行自定义方法: Headler
// //         std::cout << "自定义捕捉信号: " << signo << std::endl;
// //     }

// //     while (1)
// //     {
// //         std::cout << "hello world" << std::endl;
// //         sleep(1);
// //     }
// //     return 0;
// // }